package io.renren.modules.sys.service;

import io.renren.modules.sys.entity.SysUserEntity;

import java.util.List;
import java.util.Map;


/**
 * 系统用户
 * 
 * @author chenshun
 * @email sunlightcs@gmail.com
 * @date 2016年9月18日 上午9:43:39
 */
public interface SysUserService {

	/**
	 * 查询用户的所有权限
	 * @param userId  用户ID
	 */
	List<String> queryAllPerms(Long userId);
	
	/**
	 * 查询用户的所有菜单ID
	 */
	List<Long> queryAllMenuId(Long userId);

	/**
	 * 根据用户名，查询系统用户
	 */
	SysUserEntity queryByUserName(String username);
	
	/**
	 * 根据用户ID，查询用户
	 * @param userId
	 * @return
	 */
	SysUserEntity queryObject(Long userId);
	
	/**
	 * 查询用户列表
	 */
	List<SysUserEntity> queryList(Map<String, Object> map);
	
	/**
	 * 查询总数
	 */
	int queryTotal(Map<String, Object> map);
	
	/**
	 * 保存用户
	 */
	void save(SysUserEntity user);

	/**
	 * 保存用户不检测权限
	 */
	void saveWithOutCheck(SysUserEntity user);

	/**
	 * 修改用户
	 */
	void update(SysUserEntity user);
	
	/**
	 * 删除用户
	 */
	void deleteBatch(Long[] userIds);
	
	/**
	 * 修改密码
	 * @param userId       用户ID
	 * @param password     原密码
	 * @param newPassword  新密码
	 */
	int updatePassword(Long userId, String password, String newPassword);

	/**
	 * 用户充值
	 * @param userId 用户ID
	 * @param money 充值金额，单位分
	 * @return
	 */
	boolean userExtract(Long userId, Long money);

	/**
	 * 用户提现
	 * @param userId 用户ID
	 * @param money 充值金额，单位分
	 * @return
	 */
	boolean userRecharge(Long userId, Long money);

	/**
	 * 修改账号金额
	 * @param userId 用户ID
	 * @param balance 账号余额 单位：分
	 * @return
	 */
	boolean updateUserBalance(Long userId, Long balance);

	/**
	 * 修改账号待结金额
	 * @param userId 用户ID
	 * @param stayBalanc 待结金额 单位：分
	 * @return
	 */
	boolean updateUserStayBalance(Long userId, Long stayBalanc);

	/**
	 * 用户下注，balance扣除money，stayBalance增加money
	 * @param userId 用户ID
	 * @param money 下注金额 单位：分
	 * @return
	 */
	boolean bottom(Long userId, Long money);

	/**
	 * 根据传入条件查询
	 * @param sysUserEntity
	 * @return
	 */
	SysUserEntity queryByEntity(SysUserEntity sysUserEntity);

	/**
	 * 修改账号金额
	 * @param userId 用户ID
	 * @param balance 账号余额,单位分
	 * @param stayBalance 待结金额，单位分
	 * @return
	 */
	boolean updateUserBalance(Long userId, Long balance, Long stayBalance);

	/**
	 * 更新用户银行信息 真实姓名，银行卡号，开户行
	 * @return
	 */
	boolean updateUserBank(SysUserEntity sysUserEntity);
}
